package com.xuecheng.system.service.impl;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.crypto.digest.DigestUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xuecheng.commons.enums.ErrorCode;
import com.xuecheng.commons.model.dto.LoginDto;
import com.xuecheng.commons.model.vo.LoginVo;
import com.xuecheng.commons.model.vo.ResponseResult;
import com.xuecheng.commons.utils.JwtUtils;
import com.xuecheng.system.domain.User;
import com.xuecheng.system.mappers.UserMapper;
import com.xuecheng.system.service.UserService;
import com.xuecheng.system.web.exception.BusinessException;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    //用户登录
   @Override
    public ResponseResult login(LoginDto dto) {
  //获取
        String phone = dto.getUsername();
        String password = dto.getPassword();
        String utype = dto.getUtype();
        //非空判断
        if (ObjectUtil.isEmpty(phone)||ObjectUtil.isEmpty(password)||ObjectUtil.isEmpty(utype)){
            ErrorCode ec = ErrorCode.PARAMSERROR;
            throw new BusinessException(ErrorCode.PARAMSERROR);//和笔记不一样(以修改)
        }
//根据手机号和utype查询用户
       LambdaQueryWrapper<User> qw = new LambdaQueryWrapper<>();
        qw.eq(User::getPhone,phone);
        qw.eq(User::getUtype,utype);
       User user = this.getOne(qw);
       //判断用户是否存在
       if (user==null){
           throw new BusinessException(ErrorCode.LOGINERROR);//和笔记不一样(以修改)
       }
       //用户存在并对密码加密
       password = DigestUtil.md5Hex(password);
       if (!password.equals(user.getPassword())){
           throw new BusinessException(ErrorCode.LOGINERROR);//和笔记不一样(以修改)
       }
       //生成token
      Map map = new HashMap<>();
       map.put("userId",user.getId());
       map.put("companyId",user.getCompanyId());
       map.put("companyName",user.getCompanyName());
       String token = JwtUtils.createToken(map, 240);//超时时间


       //构造返回
       LoginVo vo = new LoginVo();
       vo.setAccess_token(token);
       vo.setUsername(user.getName());
       return ResponseResult.okResult(vo);
   }


}
